﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SlimDX;

namespace Blake.Fluid
{
    public enum ParticleColorMode
    {
        Velocity,
        Pressure
    }

    public class FluidSystemParams
    {
        #region Properies

        public int NumParticles { get; set; }

        /// <summary>
        /// Translating world scale to sim scale
        /// </summary>
        public float SimScale { get; set; }

        /// <summary>
        /// pascal-second (Pa.s) = 1 kg m^-1 s^-1  (see wikipedia page on viscosity)
        /// </summary>
        public float Viscosity { get; set; }

        /// <summary>
        /// kg / m^3
        /// </summary>
        public float RestDensity { get; set; }

        /// <summary>
        /// kg
        /// </summary>
        public float ParticleMass { get; set; }

        /// <summary>
        /// meters
        /// </summary>
        public float ParticleRadius { get; set; }

        /// <summary>
        /// meters
        /// </summary>
        public float ParticleDistance { get; set; }

        /// <summary>
        /// meters
        /// </summary>
        public float SmoothingRadius { get; set; }

        public float InternalStiffness { get; set; }

        public float ExternalStiffness { get; set; }

        public float ExternalDamping { get; set; }

        /// <summary>
        /// m / s
        /// </summary>
        public float Limit { get; set; }

        public bool Grid { get; set; }

        public bool Debug { get; set; }

        public bool PlaneGravityEnabled { get; set; }

        public Vector3 PlaneGravityDirection { get; set; }

        public bool PointGravityEnabled { get; set; }

        public float PointGravityStrength { get; set; }

        public Vector3 PointGravityPosition { get; set; }

        public double SimSize { get; internal set; }

        public Vector3 EmitterPosition { get; set; }

        public Vector3 EmitterAngle { get; set; }

        public Vector3 EmitterDAngle { get; set; }

        public Vector3 EmitterSpread { get; set; }

        public Vector3 EmitterRate { get; set; }

        public Vector3 VolumeMin { get; set; }

        public Vector3 VolumeMax { get; set; }

        public Vector3 InitMin { get; set; }

        public Vector3 InitMax { get; set; }

        public float ZMin_Slope { get; set; }

        public bool WrapX { get; set; }

        public float XminSin { get; set; }

        public float XmaxSin { get; set; }

        public ParticleColorMode ColorMode { get; set; }

        #endregion
    }
}
